home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Cool Demos, SDKs, & Tools / Demos⁄Tools⁄Offers / Eiffel for CW beta 3 / EiffelS2 / LIBRARY / MOTEL / Text.c < prev    next >
Text File  |  1999-05-27  |  10KB  |  501 lines

  1. /*------------------------------------------------------------------*/
  2. /* Eiffel/S II MacOS Runtime                                         */
  3. /*------------------------------------------------------------------*/
  4. /* Author    : Ian Joyner                                               */
  5. /* Release   : 1.0                                                  */
  6. /* Date      : Dec. 1997                                            */
  7. /* Copyright : Ian Joyner                                            */
  8. /*------------------------------------------------------------------*/
  9.  
  10. #include <TextEdit.h>
  11. #include <Eiffel2.h>
  12. #include "MOTEL.h"
  13.  
  14. /********************************************************************/
  15. /*                                                                    */
  16. /*                            TEXT EDIT                                */
  17. /*                                                                    */
  18. /********************************************************************/
  19.  
  20. TEHandle platform_text_new_mono (INTEGER dleft, INTEGER dtop, INTEGER dright, INTEGER dbottom,
  21.                                  INTEGER vleft, INTEGER vtop, INTEGER vright, INTEGER vbottom)    
  22. {
  23.     Rect dest_rect;
  24.     Rect view_rect;
  25.     
  26.     SetRect (&dest_rect, dleft, dtop, dright, dbottom);
  27.     SetRect (&view_rect, vleft, vtop, vright, vbottom);
  28.     
  29.     return TENew (&dest_rect, &view_rect);
  30. }
  31.  
  32. TEHandle platform_text_new_style (INTEGER dleft, INTEGER dtop, INTEGER dright, INTEGER dbottom,
  33.                                   INTEGER vleft, INTEGER vtop, INTEGER vright, INTEGER vbottom)    
  34. {
  35.     Rect dest_rect;
  36.     Rect view_rect;
  37.     TEHandle h;
  38.     
  39.     SetRect (&dest_rect, dleft, dtop, dright, dbottom);
  40.     SetRect (&view_rect, vleft, vtop, vright, vbottom);
  41.     
  42.     h = TEStyleNew (&dest_rect, &view_rect);
  43.     return h;
  44. }
  45.  
  46. INTEGER platform_text_size ()
  47. {
  48.     TERec p;
  49.     
  50.     return (sizeof (p));
  51. }
  52.  
  53. void platform_text_release (TEHandle h)
  54. {
  55.     TEDispose (h);
  56. }
  57.  
  58. void platform_text_activate (TEHandle h)
  59. {
  60.     TEActivate (h);
  61. }
  62.  
  63. void platform_text_deactivate (TEHandle h)
  64. {
  65.     TEDeactivate (h);
  66. }
  67.  
  68. void platform_text_key (TEHandle h, CHARACTER ch)
  69. {
  70.     TEKey (ch, h);
  71. }
  72.  
  73. void platform_text_set (TEHandle h, POINTER t, INTEGER length)
  74. {
  75.     TESetText (t, length, h);
  76. }
  77.  
  78. POINTER platform_text_get (TEHandle h)
  79. {
  80.     return *TEGetText (h);
  81. }
  82.  
  83. INTEGER platform_text_length (TEHandle h)
  84. {
  85.     return (*h)->teLength;
  86. }
  87.  
  88. POINTER platform_text_text (TEHandle h)
  89. {
  90.     return *(*h)->hText;
  91. }
  92.  
  93. INTEGER platform_text_line_count (TEHandle h)
  94. {
  95.     return (*h)->nLines;
  96. }
  97.  
  98. INTEGER platform_text_line (TEHandle h)
  99. {
  100.     int i;
  101.     
  102.     for (i=0; i < (*h)->nLines; i++)
  103.         if ((*h)->lineStarts [i] > (*h)->selStart)
  104.             return i - 1;
  105. }
  106.  
  107. void platform_text_coord_dest_rect (TEHandle h, INTEGER *l, INTEGER *t, INTEGER *r, INTEGER *b)
  108. {
  109.     *l = (*h)->destRect.left;
  110.     *t = (*h)->destRect.top;
  111.     *r = (*h)->destRect.right;
  112.     *b = (*h)->destRect.bottom;
  113. }
  114.  
  115. void platform_text_coord_view_rect (TEHandle h, INTEGER *l, INTEGER *t, INTEGER *r, INTEGER *b)
  116. {
  117.     *l = (*h)->viewRect.left;
  118.     *t = (*h)->viewRect.top;
  119.     *r = (*h)->viewRect.right;
  120.     *b = (*h)->viewRect.bottom;
  121. }
  122.  
  123. void platform_text_set_select (TEHandle h, INTEGER sel_start, INTEGER sel_end)
  124. {
  125.     TESetSelect (sel_start, sel_end, h);
  126. }
  127.  
  128. void platform_text_go_to_line (TEHandle h, INTEGER n)
  129. {
  130.     if (n > (*h)->nLines)
  131.         platform_text_set_select (h, (*h)->teLength, (*h)->teLength);    
  132.     else
  133.         platform_text_set_select (h, (*h)->lineStarts [n], (*h)->lineStarts [n]);    
  134. }
  135.  
  136. void platform_text_go_to_line_end (TEHandle h, INTEGER n)
  137. {
  138.     if (n >= (*h)->nLines)
  139.         platform_text_set_select (h, (*h)->teLength, (*h)->teLength);    
  140.     else
  141.         platform_text_set_select (h, (*h)->lineStarts [n+1] - 1, (*h)->lineStarts [n+1] - 1);    
  142. }
  143.  
  144. void platform_text_set_style_handle (TEHandle h, TEStyleHandle t)
  145. {
  146.     TESetStyleHandle (t, h);
  147. }
  148.  
  149. TEStyleHandle platform_text_get_style_handle (TEHandle h)
  150. {
  151.     return TEGetStyleHandle (h);
  152. }
  153.  
  154. void platform_text_idle (TEHandle h)
  155. {
  156.     TEIdle (h);
  157. }
  158.  
  159. void platform_text_click (TEHandle h, INTEGER x, INTEGER y, BOOLEAN extend)
  160. {
  161.     Point p;
  162.     
  163.     SetPt (&p, x, y);
  164.     TEClick (p, extend, h);
  165. }
  166.  
  167. INTEGER platform_text_sel_start (TEHandle h)
  168. {
  169.     return ((**h).selStart);
  170. }
  171.  
  172. INTEGER platform_text_sel_end (TEHandle h)
  173. {
  174.     return ((**h).selEnd);
  175. }
  176.  
  177. BOOLEAN platform_text_active (TEHandle h)
  178. {
  179.     return ((**h).active);
  180. }
  181.  
  182. void platform_text_align (TEHandle h, INTEGER alignment)
  183. {
  184.     TESetAlignment (alignment, h);
  185. }
  186.  
  187. void platform_text_update (TEHandle h, INTEGER l, INTEGER t, INTEGER r, INTEGER b)
  188. {
  189.     Rect rc;
  190.     
  191.     SetRect (&rc, l, t, r, b);
  192.     
  193.     TEUpdate (&rc, h);
  194. }
  195.  
  196. void platform_text_box (POINTER text, INTEGER length, INTEGER l, INTEGER t, INTEGER r, INTEGER b, INTEGER align)
  197. {
  198.     Rect rc;
  199.     
  200.     SetRect (&rc, l, t, r, b);
  201.     
  202.     TETextBox (text, length, &rc, align);
  203. }
  204.  
  205. void platform_text_set_view_rect (TEHandle h, INTEGER l, INTEGER t, INTEGER r, INTEGER b)
  206. {
  207.     Rect rc;
  208.     
  209.     SetRect (&rc, l, t, r, b);
  210.     
  211.     (**h).viewRect = rc;
  212. }
  213.  
  214. void platform_text_set_dest_rect (TEHandle h, INTEGER l, INTEGER t, INTEGER r, INTEGER b)
  215. {
  216.     Rect rc;
  217.     
  218.     SetRect (&rc, l, t, r, b);
  219.     
  220.     (**h).destRect = rc;
  221. }
  222.  
  223. void platform_text_recal (TEHandle h)
  224. {
  225.     TECalText (h);
  226. }
  227.  
  228. INTEGER platform_text_height (TEHandle h, INTEGER start, INTEGER end)
  229. {
  230.     return TEGetHeight (end, start, h);
  231. }
  232.  
  233. void platform_text_scroll (TEHandle h, INTEGER dh, INTEGER dv)
  234. {
  235.     TEScroll (dh, dv, h);
  236. }
  237.  
  238. void platform_text_scroll_limited (TEHandle h, INTEGER dh, INTEGER dv)
  239. {
  240.     TEPinScroll (dh, dv, h);
  241. }
  242.  
  243. void platform_text_scroll_enable (TEHandle h)
  244. {
  245.     TEAutoView (true, h);
  246. }
  247.  
  248. void platform_text_scroll_disable (TEHandle h)
  249. {
  250.     TEAutoView (false, h);
  251. }
  252.  
  253. void platform_text_selection_visible (TEHandle h)
  254. {
  255.     TESelView (h);
  256. }
  257.  
  258. void platform_text_delete (TEHandle h)
  259. {
  260.     TEDelete (h);
  261. }
  262.  
  263. void platform_text_insert (TEHandle h, POINTER text, INTEGER l)
  264. {
  265.     TEInsert (text, l, h);
  266. }
  267.  
  268. void platform_text_cut (TEHandle h)
  269. {
  270.     TECut (h);
  271. }
  272.  
  273. void platform_text_copy (TEHandle h)
  274. {
  275.     TECopy (h);
  276. }
  277.  
  278. void platform_text_paste (TEHandle h)
  279. {
  280.     TEPaste (h);
  281. }
  282.  
  283. void platform_text_style_paste (TEHandle h)
  284. {
  285.     TEStylePaste (h);
  286. }
  287.  
  288. void platform_text_to_scrap ()
  289. {
  290.     OSErr err;
  291.     
  292.     err = TEToScrap ();
  293. }
  294.  
  295. void platform_text_from_scrap ()
  296. {
  297.     OSErr err;
  298.     
  299.     err = TEFromScrap ();
  300. }
  301.  
  302. Handle platform_text_scrap_handle ()
  303. {
  304.     return TEScrapHandle ();
  305. }
  306.  
  307. INTEGER platform_text_scrap_length ()
  308. {
  309.     return TEGetScrapLength ();
  310. }
  311.  
  312. void platform_text_scrap_set_length (INTEGER new_size)
  313. {
  314.     TESetScrapLength (new_size);
  315. }
  316.  
  317. void platform_text_add_face (INTEGER *face, INTEGER new_face)
  318. {
  319.     *face |= new_face;
  320. }
  321.  
  322. void platform_text_remove_face (INTEGER *face, INTEGER old_face)
  323. {
  324.     *face ^= old_face;
  325. }
  326.  
  327. void platform_text_set_attributes (TEHandle h, INTEGER the_mode,
  328.                                    INTEGER the_font, INTEGER the_style, INTEGER the_size, INTEGER the_red, INTEGER the_green, INTEGER the_blue,
  329.                                    BOOLEAN redraw)
  330. {
  331.     RGBColor c;
  332.     TextStyle t;
  333.     
  334.     c.red = the_red;
  335.     c.green = the_green;
  336.     c.blue = the_blue;
  337.     
  338.     t.tsFont = the_font;
  339.     t.tsFace = the_style;
  340.     t.tsSize = the_size;
  341.     t.tsColor = c;
  342.  
  343.     TESetStyle (the_mode, &t, redraw, h);
  344. }
  345.  
  346. void platform_text_replace_attributes (TEHandle h, INTEGER the_mode,
  347.                                         INTEGER old_font, INTEGER old_style, INTEGER old_size, INTEGER old_red, INTEGER old_green, INTEGER old_blue,
  348.                                         INTEGER new_font, INTEGER new_style, INTEGER new_size, INTEGER new_red, INTEGER new_green, INTEGER new_blue,
  349.                                        BOOLEAN redraw)
  350. {
  351.     RGBColor old_c, new_c;
  352.     TextStyle old_t, new_t;
  353.     
  354.     old_c.red = old_red;
  355.     old_c.green = old_green;
  356.     old_c.blue = old_blue;
  357.     
  358.     old_t.tsFont = old_font;
  359.     old_t.tsFace = old_style;
  360.     old_t.tsSize = old_size;
  361.     old_t.tsColor = old_c;
  362.  
  363.     new_c.red = new_red;
  364.     new_c.green = new_green;
  365.     new_c.blue = new_blue;
  366.     
  367.     new_t.tsFont = new_font;
  368.     new_t.tsFace = new_style;
  369.     new_t.tsSize = new_size;
  370.     new_t.tsColor = new_c;
  371.  
  372.     TEReplaceStyle (the_mode, &old_t, &new_t, redraw, h);
  373. }
  374.  
  375. BOOLEAN platform_text_continuous_attributes (TEHandle h, INTEGER the_mode,
  376.                                               INTEGER the_font, INTEGER the_style, INTEGER the_size, INTEGER the_red, INTEGER the_green, INTEGER the_blue)
  377. {
  378.     RGBColor c;
  379.     TextStyle t;
  380.     short m;
  381.     
  382.     m = the_mode;
  383.     
  384.     c.red = the_red;
  385.     c.green = the_green;
  386.     c.blue = the_blue;
  387.     
  388.     t.tsFont = the_font;
  389.     t.tsFace = the_style;
  390.     t.tsSize = the_size;
  391.     t.tsColor = c;
  392.  
  393.     return TEContinuousStyle (&m, &t, h);
  394. }
  395.  
  396. void platform_text_style_insert (TEHandle h, POINTER text, INTEGER l, StScrpHandle sh)
  397. {
  398.     TEStyleInsert (text, l, sh, h);
  399. }
  400.  
  401. POINTER platform_text_style_get_scrap (TEHandle h)
  402. {
  403.     TEGetStyleScrapHandle (h);
  404. }
  405.  
  406. void platform_text_style_apply (TEHandle h, INTEGER s, INTEGER e, StScrpHandle sh, BOOLEAN redraw)
  407. {
  408.     TEUseStyleScrap (s, e, sh, redraw, h);
  409. }
  410.  
  411. void platform_text_style_count (TEHandle h, INTEGER s, INTEGER e)
  412. {
  413.     TENumStyles (s, e, h);
  414. }
  415.  
  416. INTEGER platform_text_offset (TEHandle h, INTEGER x, INTEGER y)
  417. {
  418.     Point p;
  419.     
  420.     SetPt (&p, x, y);
  421.     
  422.     return TEGetOffset (p, h);
  423. }
  424.  
  425. INTEGER platform_text_point (TEHandle h, INTEGER offset, INTEGER *x, INTEGER *y)
  426. {
  427.     Point p;
  428.     
  429.     p = TEGetPoint (offset, h);
  430.     
  431.     *x = p.h;
  432.     *y = p.v;
  433. }
  434.  
  435. INTEGER platform_text_feature_test (TEHandle h, INTEGER feature)
  436. {
  437.     return TEFeatureFlag (feature, -1, h);
  438. }
  439.  
  440. void platform_text_feature_set (TEHandle h, INTEGER feature)
  441. {
  442.     TEFeatureFlag (feature, 1, h);
  443. }
  444.  
  445. void platform_text_feature_reset (TEHandle h, INTEGER feature)
  446. {
  447.     TEFeatureFlag (feature, 0, h);
  448. }
  449.  
  450.  
  451. /********************************************************************/
  452. /*                                                                    */
  453. /*                            Font Calls                                */
  454. /*                                                                    */
  455. /********************************************************************/
  456.  
  457. INTEGER platform_text_get_font_number (ConstStr255Param name)
  458. {
  459.     short n;
  460.     Str255 scratch;
  461.         
  462.     strcpy (scratch, name);
  463.     c2pstr ((char *)scratch);
  464.     GetFNum (scratch, &n);
  465.     
  466.     return n;
  467. }
  468.  
  469. POINTER platform_text_get_font_name (INTEGER num)
  470. {
  471.     GetFontName (num, &scratch_string);
  472.     p2cstr ((char *)scratch_string);
  473.     
  474.     return &scratch_string;
  475. }
  476.  
  477. /********************************************************************/
  478. /*                                                                    */
  479. /*                            Text Utilities                            */
  480. /*                                                                    */
  481. /********************************************************************/
  482.  
  483. POINTER platform_string_get_ind (INTEGER list_id, INTEGER index)
  484. {
  485.     GetIndString (&scratch_string, list_id, index);
  486.     p2cstr ((char *)scratch_string);
  487.     
  488.     return &scratch_string;
  489. }
  490.  
  491. POINTER platform_string_get (INTEGER string_id)
  492. {
  493.     Handle sh = (char **)GetString (string_id); // don't know why we need (char **) cast??
  494.     strcpy (scratch_string, **sh);
  495.     DisposHandle (sh);
  496.     p2cstr ((char *)scratch_string);
  497.     
  498.     return &scratch_string;
  499. }
  500.  
  501.